{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "%matplotlib inline\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pregnants</th>\n",
       "      <th>Plasma_glucose_concentration</th>\n",
       "      <th>blood_pressure</th>\n",
       "      <th>Triceps_skin_fold_thickness</th>\n",
       "      <th>serum_insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>Diabetes_pedigree_function</th>\n",
       "      <th>Age</th>\n",
       "      <th>Target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.639947</td>\n",
       "      <td>0.866045</td>\n",
       "      <td>-0.031990</td>\n",
       "      <td>0.670643</td>\n",
       "      <td>-0.181541</td>\n",
       "      <td>0.166619</td>\n",
       "      <td>0.468492</td>\n",
       "      <td>1.425995</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.844885</td>\n",
       "      <td>-1.205066</td>\n",
       "      <td>-0.528319</td>\n",
       "      <td>-0.012301</td>\n",
       "      <td>-0.181541</td>\n",
       "      <td>-0.852200</td>\n",
       "      <td>-0.365061</td>\n",
       "      <td>-0.190672</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.233880</td>\n",
       "      <td>2.016662</td>\n",
       "      <td>-0.693761</td>\n",
       "      <td>-0.012301</td>\n",
       "      <td>-0.181541</td>\n",
       "      <td>-1.332500</td>\n",
       "      <td>0.604397</td>\n",
       "      <td>-0.105584</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.844885</td>\n",
       "      <td>-1.073567</td>\n",
       "      <td>-0.528319</td>\n",
       "      <td>-0.695245</td>\n",
       "      <td>-0.540642</td>\n",
       "      <td>-0.633881</td>\n",
       "      <td>-0.920763</td>\n",
       "      <td>-1.041549</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-1.141852</td>\n",
       "      <td>0.504422</td>\n",
       "      <td>-2.679076</td>\n",
       "      <td>0.670643</td>\n",
       "      <td>0.316566</td>\n",
       "      <td>1.549303</td>\n",
       "      <td>5.484909</td>\n",
       "      <td>-0.020496</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   pregnants  Plasma_glucose_concentration  blood_pressure  \\\n",
       "0   0.639947                      0.866045       -0.031990   \n",
       "1  -0.844885                     -1.205066       -0.528319   \n",
       "2   1.233880                      2.016662       -0.693761   \n",
       "3  -0.844885                     -1.073567       -0.528319   \n",
       "4  -1.141852                      0.504422       -2.679076   \n",
       "\n",
       "   Triceps_skin_fold_thickness  serum_insulin       BMI  \\\n",
       "0                     0.670643      -0.181541  0.166619   \n",
       "1                    -0.012301      -0.181541 -0.852200   \n",
       "2                    -0.012301      -0.181541 -1.332500   \n",
       "3                    -0.695245      -0.540642 -0.633881   \n",
       "4                     0.670643       0.316566  1.549303   \n",
       "\n",
       "   Diabetes_pedigree_function       Age  Target  \n",
       "0                    0.468492  1.425995       1  \n",
       "1                   -0.365061 -0.190672       0  \n",
       "2                    0.604397 -0.105584       1  \n",
       "3                   -0.920763 -1.041549       0  \n",
       "4                    5.484909 -0.020496       1  "
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# load FE_pima-indians-diabetes.csv,that has been standardized.\n",
    "#path = './data/'\n",
    "train = pd.read_csv(\"FE_pima-indians-diabetes.csv\")\n",
    "train.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<bound method DataFrame.info of      pregnants  Plasma_glucose_concentration  blood_pressure  \\\n",
      "0     0.639947                      0.866045       -0.031990   \n",
      "1    -0.844885                     -1.205066       -0.528319   \n",
      "2     1.233880                      2.016662       -0.693761   \n",
      "3    -0.844885                     -1.073567       -0.528319   \n",
      "4    -1.141852                      0.504422       -2.679076   \n",
      "5     0.342981                     -0.185948        0.133453   \n",
      "6    -0.250952                     -1.435189       -1.851862   \n",
      "7     1.827813                     -0.218823       -0.031990   \n",
      "8    -0.547919                      2.476909       -0.197433   \n",
      "9     1.233880                      0.109925        1.953325   \n",
      "10    0.046014                     -0.383197        1.622439   \n",
      "11    1.827813                      1.523540        0.133453   \n",
      "12    1.827813                      0.570172        0.629782   \n",
      "13   -0.844885                      2.213910       -1.024647   \n",
      "14    0.342981                      1.457791       -0.031990   \n",
      "15    0.936914                     -0.711944       -0.031990   \n",
      "16   -1.141852                     -0.120198        0.960667   \n",
      "17    0.936914                     -0.481821        0.133453   \n",
      "18   -0.844885                     -0.613320       -3.506291   \n",
      "19   -0.844885                     -0.218823       -0.197433   \n",
      "20   -0.250952                      0.142800        1.291553   \n",
      "21    1.233880                     -0.744819        0.960667   \n",
      "22    0.936914                      2.444034        1.456996   \n",
      "23    1.530847                     -0.087324        0.629782   \n",
      "24    2.124780                      0.701671        1.787882   \n",
      "25    1.827813                      0.109925       -0.197433   \n",
      "26    0.936914                      0.833170        0.298896   \n",
      "27   -0.844885                     -0.810569       -0.528319   \n",
      "28    2.718712                      0.767420        0.795225   \n",
      "29    0.342981                     -0.153073        1.622439   \n",
      "..         ...                           ...             ...   \n",
      "738  -0.547919                     -0.744819       -1.024647   \n",
      "739  -0.844885                     -0.646195        0.133453   \n",
      "740   2.124780                     -0.054449        0.629782   \n",
      "741  -0.250952                     -0.646195       -2.348190   \n",
      "742  -0.844885                     -0.416071       -1.190090   \n",
      "743   1.530847                      0.603047        1.787882   \n",
      "744   2.718712                      1.030419        1.291553   \n",
      "745   2.421746                     -0.711944        0.960667   \n",
      "746  -0.844885                      0.833170        1.787882   \n",
      "747  -0.844885                     -1.336565        0.133453   \n",
      "748  -0.250952                      2.148161       -0.197433   \n",
      "749   0.639947                      1.326292       -0.859204   \n",
      "750   0.046014                      0.471547       -0.197433   \n",
      "751  -0.844885                     -0.021574        0.464339   \n",
      "752  -0.250952                     -0.448946       -0.859204   \n",
      "753  -1.141852                      1.950912        1.291553   \n",
      "754   1.233880                      1.063293        0.464339   \n",
      "755  -0.844885                      0.208549        1.291553   \n",
      "756   0.936914                      0.504422        1.456996   \n",
      "757  -1.141852                      0.044175       -0.031990   \n",
      "758  -0.844885                     -0.514696        0.298896   \n",
      "759   0.639947                      2.246785        1.622439   \n",
      "760  -0.547919                     -1.106442       -1.190090   \n",
      "761   1.530847                      1.589290        0.133453   \n",
      "762   1.530847                     -1.073567       -0.859204   \n",
      "763   1.827813                     -0.679069        0.298896   \n",
      "764  -0.547919                      0.011301       -0.197433   \n",
      "765   0.342981                     -0.021574       -0.031990   \n",
      "766  -0.844885                      0.142800       -1.024647   \n",
      "767  -0.844885                     -0.942068       -0.197433   \n",
      "\n",
      "     Triceps_skin_fold_thickness  serum_insulin       BMI  \\\n",
      "0                       0.670643      -0.181541  0.166619   \n",
      "1                      -0.012301      -0.181541 -0.852200   \n",
      "2                      -0.012301      -0.181541 -1.332500   \n",
      "3                      -0.695245      -0.540642 -0.633881   \n",
      "4                       0.670643       0.316566  1.549303   \n",
      "5                      -0.012301      -0.181541 -0.997745   \n",
      "6                       0.329171      -0.610145 -0.211799   \n",
      "7                      -0.012301      -0.181541  0.414047   \n",
      "8                       1.808882       4.660524 -0.284572   \n",
      "9                      -0.012301      -0.181541 -0.022590   \n",
      "10                     -0.012301      -0.181541  0.748802   \n",
      "11                     -0.012301      -0.181541  0.807020   \n",
      "12                     -0.012301      -0.181541 -0.779427   \n",
      "13                     -0.695245       8.170442 -0.342790   \n",
      "14                     -1.150541       0.397653 -0.968636   \n",
      "15                     -0.012301      -0.181541 -0.357345   \n",
      "16                      2.036530       1.034767  1.942276   \n",
      "17                     -0.012301      -0.181541 -0.415563   \n",
      "18                      1.012114      -0.668065  1.578412   \n",
      "19                      0.101523      -0.517474  0.312165   \n",
      "20                      1.353586       1.092686  0.996229   \n",
      "21                     -0.012301      -0.181541  0.428601   \n",
      "22                     -0.012301      -0.181541  1.069002   \n",
      "23                      0.670643      -0.181541 -0.502890   \n",
      "24                      0.442995       0.061720  0.603256   \n",
      "25                     -0.353773      -0.297380 -0.197245   \n",
      "26                     -0.012301      -0.181541  1.010784   \n",
      "27                     -1.605837      -0.007783 -1.347055   \n",
      "28                     -1.150541      -0.355300 -1.492600   \n",
      "29                     -0.012301      -0.181541  0.239392   \n",
      "..                           ...            ...       ...   \n",
      "738                    -1.378189       0.223895  0.603256   \n",
      "739                    -0.012301      -0.181541  1.025338   \n",
      "740                     0.898290       0.108056  1.432866   \n",
      "741                    -1.036717      -0.540642 -0.240908   \n",
      "742                    -1.264365      -0.285796 -0.575663   \n",
      "743                    -0.012301      -0.181541  0.035628   \n",
      "744                     0.898290      -0.007783  1.185439   \n",
      "745                     0.442995      -0.413219 -0.357345   \n",
      "746                     1.353586      -0.181541  2.451685   \n",
      "747                     1.353586      -0.969246  2.015048   \n",
      "748                    -0.809069       0.687250  0.574147   \n",
      "749                    -0.012301      -0.181541 -1.186955   \n",
      "750                    -0.012301      -0.181541 -0.182690   \n",
      "751                     1.125938      -0.772320  0.952566   \n",
      "752                    -0.581421      -0.181541 -0.939527   \n",
      "753                     1.695058       4.278256  1.578412   \n",
      "754                     0.329171      -0.181541 -0.008035   \n",
      "755                     1.125938      -0.355300  0.588702   \n",
      "756                     1.353586      -0.181541 -0.066254   \n",
      "757                    -0.012301      -0.181541  0.559592   \n",
      "758                    -0.012301      -0.181541  0.734247   \n",
      "759                    -0.012301      -0.181541  0.443156   \n",
      "760                    -0.353773      -1.444185 -0.590218   \n",
      "761                     0.215347      -0.181541  1.680294   \n",
      "762                    -0.012301      -0.181541 -1.448937   \n",
      "763                     2.150354       0.455573  0.064737   \n",
      "764                    -0.239949      -0.181541  0.632365   \n",
      "765                    -0.695245      -0.332132 -0.910418   \n",
      "766                    -0.012301      -0.181541 -0.342790   \n",
      "767                     0.215347      -0.181541 -0.299127   \n",
      "\n",
      "     Diabetes_pedigree_function       Age  Target  \n",
      "0                      0.468492  1.425995       1  \n",
      "1                     -0.365061 -0.190672       0  \n",
      "2                      0.604397 -0.105584       1  \n",
      "3                     -0.920763 -1.041549       0  \n",
      "4                      5.484909 -0.020496       1  \n",
      "5                     -0.818079 -0.275760       0  \n",
      "6                     -0.676133 -0.616111       1  \n",
      "7                     -1.020427 -0.360847       0  \n",
      "8                     -0.947944  1.681259       1  \n",
      "9                     -0.724455  1.766346       1  \n",
      "10                    -0.848280 -0.275760       0  \n",
      "11                     0.196681  0.064591       1  \n",
      "12                     2.926869  2.021610       0  \n",
      "13                    -0.223115  2.191785       1  \n",
      "14                     0.347687  1.511083       1  \n",
      "15                     0.036615 -0.105584       1  \n",
      "16                     0.238963 -0.190672       1  \n",
      "17                    -0.658012 -0.190672       1  \n",
      "18                    -0.872441 -0.020496       0  \n",
      "19                     0.172520 -0.105584       1  \n",
      "20                     0.701041 -0.531023       0  \n",
      "21                    -0.253316  1.425995       0  \n",
      "22                    -0.063049  0.660206       1  \n",
      "23                    -0.630831 -0.360847       1  \n",
      "24                    -0.658012  1.511083       1  \n",
      "25                    -0.805998  0.660206       1  \n",
      "26                    -0.648952  0.830381       1  \n",
      "27                     0.045675 -0.956462       0  \n",
      "28                    -0.685193  2.021610       0  \n",
      "29                    -0.407342  0.404942       0  \n",
      "..                          ...       ...     ...  \n",
      "738                   -0.057009 -1.041549       0  \n",
      "739                   -0.540228  0.745293       1  \n",
      "740                    0.945671  1.255820       1  \n",
      "741                   -0.217075 -0.616111       0  \n",
      "742                   -0.763716 -0.956462       0  \n",
      "743                    0.791645  1.000557       1  \n",
      "744                    2.120497  0.490030       0  \n",
      "745                    0.048695  1.085644       0  \n",
      "746                   -0.343920 -0.531023       1  \n",
      "747                    1.884928 -0.105584       0  \n",
      "748                   -0.192914  0.234767       1  \n",
      "749                   -0.887541  1.425995       1  \n",
      "750                    2.144658 -0.956462       1  \n",
      "751                   -0.636871 -0.445935       0  \n",
      "752                   -0.751636 -0.701198       0  \n",
      "753                   -0.754656 -0.616111       1  \n",
      "754                   -0.087210  1.000557       1  \n",
      "755                    1.767143  0.319855       1  \n",
      "756                   -0.244256  0.490030       0  \n",
      "757                   -0.645932  1.596171       1  \n",
      "758                   -0.830159 -0.616111       0  \n",
      "759                   -0.585529  2.787399       1  \n",
      "760                    0.888288 -0.956462       0  \n",
      "761                   -0.208015  0.830381       1  \n",
      "762                   -0.996266 -0.020496       0  \n",
      "763                   -0.908682  2.532136       0  \n",
      "764                   -0.398282 -0.531023       0  \n",
      "765                   -0.685193 -0.275760       0  \n",
      "766                   -0.371101  1.170732       1  \n",
      "767                   -0.473785 -0.871374       0  \n",
      "\n",
      "[768 rows x 9 columns]>\n",
      "(768, 9)\n"
     ]
    }
   ],
   "source": [
    "print(train.info)\n",
    "print(train.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(768, 8)\n"
     ]
    }
   ],
   "source": [
    "# Extract CSV data with X_ and Y_ for Logistic Regression.\n",
    "Y_ = train[\"Target\"]\n",
    "X_ = train.drop([\"Target\"],axis = 1)\n",
    "\n",
    "# store column's feature name\n",
    "feature_name = X_.columns\n",
    "\n",
    "# Using Sparse Matrix to be prepared into to Logistic Regression\n",
    "\n",
    "from scipy.sparse import csr_matrix\n",
    "X_ = csr_matrix(X_)\n",
    "\n",
    "print(X_.shape)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# do an statement for an Logtistic Regression\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "lr = LogisticRegression()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "logloss of each fold is:  [ 0.48797856  0.53011593  0.4562292   0.422546    0.48392885]\n",
      "cv logloss mean is: 0.476159709444\n"
     ]
    }
   ],
   "source": [
    "# Using cross_val_score by uinsg (LR) to predict the model's evaluation and do parematers adjustment.\n",
    "#cross_val_score(estimator, X, y=None, groups=None, scoring=None, cv=’warn’, n_jobs=None, verbose=0, \n",
    "#fit_params=None, pre_dispatch=‘2*n_jobs’, error_score=’raise-deprecating’)\n",
    "\n",
    "from sklearn.model_selection import cross_val_score\n",
    "loss_val = cross_val_score(lr,X_,Y_,cv=5,scoring='neg_log_loss')\n",
    "\n",
    "print ('logloss of each fold is: ',-loss_val)\n",
    "print ('cv logloss mean is:', -loss_val.mean())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.476029211923\n",
      "{'C': 1, 'penalty': 'l1'}\n",
      "LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,\n",
      "          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
      "          penalty='l1', random_state=None, solver='liblinear', tol=0.0001,\n",
      "          verbose=0, warm_start=False)\n"
     ]
    }
   ],
   "source": [
    "# Using gridsearchcv to do super-parameters adjustment\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "penaltys = ['l1','l2']\n",
    "Cs = [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "tuned_parameters = dict(penalty = penaltys, C = Cs)\n",
    "\n",
    "lr_penalty= LogisticRegression()\n",
    "grid= GridSearchCV(lr_penalty, tuned_parameters,cv=5, scoring='neg_log_loss',n_jobs=4,)\n",
    "grid.fit(X_,Y_)\n",
    "\n",
    "print(-grid.best_score_)\n",
    "print(grid.best_params_)\n",
    "print(grid.best_estimator_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nV/4fDpFTlpds+gMAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x16f8c0a0208>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot CV误差曲线\n",
    "test_means = grid.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = grid.cv_results_[ 'std_test_score' ]\n",
    "train_means = grid.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = grid.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "\n",
    "# plot results\n",
    "n_Cs = len(Cs)\n",
    "number_penaltys = len(penaltys)\n",
    "test_scores = np.array(test_means).reshape(n_Cs,number_penaltys)\n",
    "train_scores = np.array(train_means).reshape(n_Cs,number_penaltys)\n",
    "test_stds = np.array(test_stds).reshape(n_Cs,number_penaltys)\n",
    "train_stds = np.array(train_stds).reshape(n_Cs,number_penaltys)\n",
    "\n",
    "x_axis = np.log10(Cs)\n",
    "for i, value in enumerate(penaltys):\n",
    "\n",
    "    plt.errorbar(x_axis, -test_scores[:,i], yerr=test_stds[:,i] ,label = penaltys[i] +' Test')\n",
    "    plt.errorbar(x_axis, -train_scores[:,i], yerr=train_stds[:,i] ,label = penaltys[i] +' Train')\n",
    "    \n",
    "plt.legend()\n",
    "plt.xlabel( 'log(C)' )                                                                                                      \n",
    "plt.ylabel( 'logloss' )\n",
    "#plt.savefig('LogisticGridSearchCV_C.png' )\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=5, error_score='raise',\n",
       "       estimator=LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
       "          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
       "          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
       "          verbose=0, warm_start=False),\n",
       "       fit_params={}, iid=True, n_jobs=4,\n",
       "       param_grid={'penalty': ['l1', 'l2'], 'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score=True,\n",
       "       scoring=None, verbose=0)"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Using default gridsearchCV to do super-parameters adjustment\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "penaltys = ['l1','l2']\n",
    "Cs = [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "tuned_parameters = dict(penalty = penaltys, C = Cs)\n",
    "\n",
    "lr_penalty= LogisticRegression()\n",
    "\n",
    "lr_cv = GridSearchCV(lr_penalty, tuned_parameters,cv=5,n_jobs=4,)\n",
    "lr_cv.fit(X_,Y_)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.774739583333\n",
      "{'C': 0.1, 'penalty': 'l2'}\n",
      "LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,\n",
      "          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
      "          penalty='l1', random_state=None, solver='liblinear', tol=0.0001,\n",
      "          verbose=0, warm_start=False)\n"
     ]
    }
   ],
   "source": [
    "print(lr_cv.best_score_)\n",
    "print(lr_cv.best_params_)\n",
    "print(grid.best_estimator_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nYQnFGGOMX/w/DjKuz8zDMA8AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x16f8c105438>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "test_means = lr_cv.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = lr_cv.cv_results_[ 'std_test_score' ]\n",
    "train_means = lr_cv.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = lr_cv.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "\n",
    "# plot results\n",
    "n_Cs = len(Cs)\n",
    "number_penaltys = len(penaltys)\n",
    "test_scores = np.array(test_means).reshape(n_Cs,number_penaltys)\n",
    "train_scores = np.array(train_means).reshape(n_Cs,number_penaltys)\n",
    "test_stds = np.array(test_stds).reshape(n_Cs,number_penaltys)\n",
    "train_stds = np.array(train_stds).reshape(n_Cs,number_penaltys)\n",
    "\n",
    "x_axis = np.log10(Cs)\n",
    "for i, value in enumerate(penaltys):\n",
    "\n",
    "    plt.errorbar(x_axis, -test_scores[:,i], yerr=test_stds[:,i] ,label = penaltys[i] +' Test')\n",
    "    plt.errorbar(x_axis, -train_scores[:,i], yerr=train_stds[:,i] ,label = penaltys[i] +' Train')\n",
    "    \n",
    "plt.legend()\n",
    "plt.xlabel( 'log(C)' )                                                                                                      \n",
    "plt.ylabel( 'logloss' )\n",
    "#plt.savefig('LogisticGridSearchCV_C.png' )\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Conclusion: Only using default gridsearchCV, with scoring on default values, L1's logloss is worse than L2, but if using scoring = neg_log_loss, L1 is better than L2."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
